package com.chinasoft;

import com.chinasoft.api.HdfsApi;
import com.chinasoft.mapper.ElectronicsSalesMapper;

import com.chinasoft.pojo.ElectronicsSales;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;
import java.util.List;

public class Hdfs2db {

    /**
     * 主函数，程序入口点
     * 该函数执行以下主要操作：
     * 1. 从HDFS读取张文数据列表
     * 2. 建立数据库连接
     * 3. 将HDFS数据插入到数据库中
     *
     * @param args 命令行参数数组
     * @throws Exception 当发生IO异常、数据库操作异常或其他运行时异常时抛出
     */
    public static void main(String[] args) throws Exception{
        System.out.println("Hello Hdfs2db!");



        // 从HDFS获取张文数据列表
        HdfsApi hdfsApi = new HdfsApi();
        List<ElectronicsSales> esList = hdfsApi.getElectronicsSalesList();
        for (ElectronicsSales es : esList) {
            System.out.println(es);
        }

        // 初始化MyBatis数据库连接相关对象
        final InputStream is = Resources.getResourceAsStream("sqlMapConfig.xml");
        final SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
        final SqlSession sqlSession = factory.openSession();

        // 批量插入数据到数据库
        ElectronicsSalesMapper esMapper = sqlSession.getMapper(ElectronicsSalesMapper.class);
        for (ElectronicsSales es : esList) {
            esMapper.insert(es);
        }

        // 提交事务
        sqlSession.commit();

        // 关闭对象
        sqlSession.close();


        System.out.println("共读取到 " + esList.size() + " 条数据");
        for (ElectronicsSales es : esList) {
            System.out.println(es);
        }
    }



}
